package com.blockchain.console.service.system;

import org.apache.commons.codec.digest.UnixCrypt;

import com.blockchain.common.enums.IsPass;
import com.blockchain.console.service.system.entity.SupUser;
import com.blockchain.console.service.system.query.SupUserQuery;
import com.blockchain.framework.service.Service;
import com.blockchain.framework.service.query.Paging;
import com.blockchain.framework.service.query.PagingResult;

public abstract interface SupUserManage extends Service {

	/**
	 * 
	 * <dt>
	 * <dl>
	 * 描述：添加系统用户账号
	 * </dl>
	 * 
	 * <dl>
	 * 数据校验：
	 * <ol>
	 * <li>无</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>
	 * 逻辑校验：
	 * <ol>
	 * <li>查询{@code T7200}表   查询条件{@code T7200.F02 = accountName}   如果查询到记录则抛出逻辑异常     登录账户已经存在.</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>
	 * 业务处理：
	 * <ol>
	 * <li>打开事务</li>
	 * <li>新增{@link T7200}表</li>   
	 * <li>
	 * 新增字段列表:
	 * <ol>
	 * <li>{@code accountName}对应{@code T7200.F02}</li>
	 * <li>通过{@link UnixCrypt}加密{@code password}对应{@code T7200.F03}</li>
	 * <li>{@code name}对应{@code T7200.F04}</li>
	 * <li>{@code status} 对应{@code T7200.F05}</li>
	 * <li>当前系统时间 对应{@code T7200.F06}</li>
	 * <li>{@link IsPass#S} 对应{@code T7200.F09}</li>
	 * 
	 * </ol>
	 * </li>
	 * </ol>
	 * </dl>
	 * </dt>
	 * 
	 * 
	 * @param accountName 账号
	 * @param password  账号密码
	 * @param name 真实姓名
	 * @param status 状态
	 * @param coinName 币种名称
	 * @param coinId 
	 * @return {@code int } 自增ID
	 * @throws Throwable
	 */
	public abstract int add(String accountName, String password, String name,
			String status,String sjh, int coinId, String coinName) throws Throwable;

	/**
	 * 
	 * <dt>
	 * <dl>
	 * 描述：根据ID查询系统用户详细
	 * </dl>
	 * 
	 * <dl>
	 * 数据校验：
	 * <ol>
	 * <li>如果{@code id <= 0} 则抛出参数异常 指定的系统账号ID不存在.</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>
	 * 逻辑校验：
	 * <ol>
	 * <li>无</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>  
	 * 业务处理：
	 * <ol>
	 * <li>查询{@link _1020}表{@link _1022}表{@link T7200}表  <li>
	 * <li>查询条件:
	 * <ol>
	 * <li>{@code T7200.F01=_1022.F01 }</li>
	 * <li>{@code _1022.F02=_1020.F01 WHERE T7200.F01= id}</li>
	 * </ol>
	 * </li>
	 * 
	 * <li>
	 * 查询字段列表:
	 * <ol>
	 * <li>{@link SupUser#id}对应{@code T7200.F01}</li>
	 * <li>{@link SupUser#accountName}对应{@code T7200.F02}</li>
	 * <li>{@link SupUser#password}对应{@code T7200.F03}</li>
	 * <li>{@link SupUser#name}对应{@code T7200.F04}</li>
	 * <li>{@link SupUser#status}对应{@code T7200.F05}</li>
	 * <li>{@link SupUser#createTime}对应{@code T7200.F06}</li>
	 * <li>{@link SupUser#lastTime}对应{@code T7200.F07}</li>
	 * <li>{@link SupUser#lastIp}对应{@code T7200.F08}</li>
	 * <li>{@link SupUser#roleId}对应{@code _1020.F01}</li>
	 * </ol>
	 * </dl>
	 * </dt>
	 * 
	 * @param id 主键ID
	 * @return {@link SupUser} 系统用户信息
	 * @throws Throwable
	 */
	public abstract SupUser get(int id) throws Throwable;

	public abstract SupUser get() throws Throwable;
	/**
	 * 
	 * <dt>
	 * <dl>
	 * 描述：根据条件分页查询所有系统用户信息
	 * </dl>
	 * 
	 * <dl>
	 * 数据校验：
	 * <ol>
	 * <li>无</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>
	 * 逻辑校验：
	 * <ol>
	 * <li>无</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>  
	 * 业务处理：
	 * <ol>
	 * <li>查询{@link _1020} 表{@link _1022} 表{@link T7200}表  <li>
	 * <li>查询条件:
	 * <ol>
	 * <li>{@code T7200.F01=_1022.F01 }</li>
	 * <li>{@code _1022.F02=_1020.F01 WHERE T7200.F01= id}</li>
	 * <li>如果{@code query != null} 则
	 * <ol>
	 * <li>如果{@link SupUserQuery#getAccountName()}不为空  则{@code T7200.F02 LIKE }{@link SupUserQuery#getAccountName()}</li>
	 * <li>如果{@link SupUserQuery#getName()}不为空  则{@code T7200.F04 LIKE }{@link SupUserQuery#getName()}</li>
	 * <li>如果{@link SupUserQuery#getStatus()}不为空  则{@code T7200.F05= }{@link SupUserQuery#getStatus()}</li>
	 * <li>如果{@link SupUserQuery#getCreateTimeStart()}不为空  则{@code DATE(T7200.F07)>= }{@link SupUserQuery#getCreateTimeStart()}</li>
	 * <li>如果{@link SupUserQuery#getCreateTimeEnd()}不为空  则{@code DATE(T7200.F07)<=}{@link SupUserQuery#getCreateTimeEnd()}</li>
	 * <li>如果{@link SupUserQuery#getRoleId()}大于0  则{@code _1020.F01= }{@link SupUserQuery#getRoleId()}</li>
	 * </ol>
	 * </li>
	 * <li>按照{@code T7200.F06}字段降序排序</li>
	 * 
	 * <li>
	 * 查询字段列表:
	 * <ol>
	 * <li>{@link SupUser#id}对应{@code T7200.F01}</li>
	 * <li>{@link SupUser#accountName}对应{@code T7200.F02}</li>
	 * <li>{@link SupUser#name}对应{@code T7200.F04}</li>
	 * <li>{@link SupUser#status}对应{@code T7200.F05}</li>
	 * <li>{@link SupUser#createTime}对应{@code T7200.F06}</li>
	 * <li>{@link SupUser#lastTime}对应{@code T7200.F07}</li>
	 * <li>{@link SupUser#lastIp}对应{@code T7200.F08}</li>
	 * <li>{@link SupUser#roleName}对应{@code _1020.F02}</li>
	 * 
	 * </ol>
	 * </dl>
	 * </dt>
	 * 
	 * 
	 * 
	 * @param query 查询条件
	 * @param paging 分页参数
	 * @return {@link PagingResult}{@code <}{@link SupUser}{@code >} 查询结果
	 * @throws Throwable
	 */
	public abstract PagingResult<SupUser> serarch(SupUserQuery query,
			Paging paging) throws Throwable;

	/**
	 * 
	 * <dt>
	 * <dl>
	 * 描述：修改系统用户账号
	 * </dl>
	 * 
	 * <dl>
	 * 数据校验：
	 * <ol>
	 * <li>无</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>
	 * 逻辑校验：
	 * <ol>
	 * <li>查询{@code T7200} 查询条件{@code T7200.F01 = id} 如果存在 则抛出逻辑异常   指定的用户ID不存在.</li>
	 * </ol>
	 * </dl>
	 * 
	 * <dl>  
	 * 业务处理：
	 * <ol>
	 * <li>打开事务</li>
	 * <li>修改{@code T7200}表    修改条件{@code T7200.F01 = id}</li>
	 * <li>如果{@code password}为空 则不修改{@code T7200.F03}字段</li>
	 * 
	 * <li>
	 * 修改字段列表:
	 * <ol>
	 * <li>通过{@link UnixCrypt}加密{@code password}对应{@code T7200.F03}</li>
	 * <li>{@code name}对应{@code T7200.F04}</li>
	 * <li>{@code status}对应{@code T7200.F05}</li>
	 * </ol>
	 * </dl>
	 * </dt>
	 * 
	 * 
	 * @param id 账号ID
	 * @param password 账号密码
	 * @param name 真实姓名
	 * @param status 状态
	 * @throws Throwable
	 */
	public abstract void update(int id, String password, String name,
			String status,String sjh, int coinId, String coinName) throws Throwable;


}
